import config from "./config";
import water from "./canvas/Water";
import wallBrick from "./canvas/WallBrick";
import wallSteel from "./canvas/WallSteel";

export default {
    /**
     * 判断是否与画布触碰
     * @param x  当前模型的X轴
     * @param y  当前模型的Y轴
     * @param width  当前模型的宽
     * @param height 当前模型的高
     */
    isCanvasTouch(
        x: number,
        y: number,
        width: number = config.model.common.width,
        height: number = config.model.common.height
    ): boolean {
        // ********************* 坐标边界判断 *********************
        //x最大的坐标边界
        let maxX = config.canvas.width - width;
        //x最大的坐标边界
        let maxY = config.canvas.height - height;

        return x < 0 || x > maxX || y < 0 || y > maxY;
        // ********************* 坐标边界判断 *********************
    },

    /**
     * 判断是否与模型触碰
     * @param x  当前模型的X轴
     * @param y  当前模型的Y轴
     * @param width  当前模型的宽
     * @param height 当前模型的高
     * @param models 需要判断碰撞的其他模型集合
     */
    modelTouch(
        x: number,
        y: number,
        models: IModel[] = [
            ...water.models,// 水域
            ...wallBrick.models,// 砖墙
            ...wallSteel.models,// 钢墙
        ],
        width: number = config.model.common.width,
        height: number = config.model.common.height,
    ): IModel | undefined {
        // ********************* 其他模型碰撞判断 *********************
        return models.find(model => {
            let leftX = model.x - width // 物体模型 左侧边碰撞判断
            let rightX = model.x + model.width// 物体模型 右侧边碰撞判断
            let topY = model.y - height// 物体模型 上侧边碰撞判断
            let bottomY = model.y + model.height// 物体模型 下侧边碰撞判断
            const state = x <= leftX || x >= rightX || y <= topY || y >= bottomY
            return !state
        })
        // ********************* 其他模型碰撞判断 *********************
    }
}
